package pruebas.naves;


import static modelo.SetUps.ENERGIA_CIVIL;
import static modelo.SetUps.PUNTOS_CIVIL;
import static modelo.SetUps.VELOCIDAD_CIVIL;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import modelo.desplazadores.DesplazadorLineaRecta;
import modelo.naves.Civil;
import modelo.naves.EnergiaAgotadaException;
import modelo.util.Vector;

import org.junit.Before;
import org.junit.Test;

public class TestCivil {
	private Vector p1 = new Vector(0,10);//una posicion donde crear la nave
	private Vector p2 = new Vector (1,0);
	private Civil nave;
	
	@Before
	public void setUp() throws Exception {
		nave = new Civil (p1, p2);
	}

	@Test
	public void testInicializacion() {
		assertEquals("inicializacion incorrecta de posicion en nave",
				p1, nave.getPosicion());
		assertEquals("inicializacion incorrecta de posicion en nave",
				ENERGIA_CIVIL, nave.getEnergia());
		assertEquals ("puntos incorrectos ",
				PUNTOS_CIVIL, nave.getPuntos(0));
	}
	
	@Test
	public void testMovimiento() {
		DesplazadorLineaRecta desplazador = new DesplazadorLineaRecta(p1, p2,
				VELOCIDAD_CIVIL);
		for (int i = 0; i < 5; i++) {
			nave.mover();
			desplazador.mover();
			assertEquals(
					"movimiento incorrecto en nave, al mover mas de una vez",
					desplazador.getPosicion(), nave.getPosicion());
		}
	}
	
	@Test (expected = EnergiaAgotadaException.class)
	public void testDanio(){
		//aplico a la nave un danio mayor a su energia
		nave.recibirDisparo(ENERGIA_CIVIL + 5);
		assertEquals("energia en nave no se descuenta adecuadamente",
				(-5), nave.getEnergia());
		assertFalse("nave no debe permitir seguir actuando con su energia agotada",
				nave.seguirActuando());
		//al intentar moverse debe lanzar una excepcion
		nave.mover();
	}
}
